perm filename T10.MAC[IP,NET] blob
sn#702349 filedate 1983-03-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE T10
C00003 00003 from COMMON.MAC/147P
C00006 00004 from COMMON.MAC/150P,151P
C00010 00005 from COMDEV.MAC/78P
C00015 00006 END
C00016 ENDMK
C⊗;
TITLE T10
;This file contains code to adapt TOPS-10 IP/TCP support to WAITS. Some of
;it is taken from TOPS-10, other parts are rewritten to work on WAITS.
SEARCH F,S
$RELOC
$HIGH
TICSEC::JIFSEC## ;see COMMON.MAC/102P
;from COMMON.MAC/147P
;COMMON SUBROUTINE RETURNS
CPOPJ2::AOS (P) ;DOUBLE SKIP SUBROUTINE RETURN
CPOPJ1::AOSA (P) ;SKIP SUBROUTINE RETURN
DPOPJ:: MOVEM S,DEVIOS(F) ;DEPOSIT I/O STATUS WORD IN DDB
CPOPJ:: POPJ P,
TPOPJ1::AOSA -1(P) ;RESTORE T1 THEN SKIP RETURN
TTPOPJ::POP P,T2
TPOPJ:: POP P,T1 ;RESTORE T1
POPJ P, ;AND RETURN
JPOPJ1:: ;DUPLICATE NAME (PREFERRED)
IPOPJ1::AOS -1(P) ;SET FOR SKIP RETURN
JPOPJ:: ;DUPLICATE NAME (PREFERRED)
IPOPJ:: POP P,J ;RESTORE J (USUALLY JOB OR HIGH SEG NUMBER)
POPJ P,
T2POJ1::AOS -1(P)
T2POPJ::POP P,T2 ;RESTORE T2
POPJ P,
MPOPJ:: POP P,M
POPJ P,
WPOPJX::CAIA ;NETSER PUSHES THIS ADDR ON THE STACK THEN
WPOPJ1::AOS -1(P) ; EVENTUALLY DOES A CPOPJ1 RETURN
WPOPJ:: POP P,W
POPJ P,
T3POPJ::POP P,T3
POPJ P,
FUPOJ1::POP P,F
UPOPJ1::
LPOPJ1::AOSA -1(P) ;SKIP AND RESTORE LINE
FUPOPJ::POP P,F
UPOPJ::
LPOPJ:: POP P,U ;RESTORE LINE AND RETURN
POPJ P,0 ;RETURN
FPOPJ1::AOS -1(P)
FPOPJ:: POP P,F ;RESTORE F
POPJ P,0 ;RETURN
ZPOPJ:: TDZA T1,T1
M1POPJ::SETOM T1
POPJ P,
;from COMMON.MAC/200P (PI.ON defined in S.MAC/81P):
ONPOPJ::CONO PI,PI.ON
POPJ P,
;from SCNSER.MAC/29P:
;ROUTINE TO ALLOW SCANNER INTERRUPTS AGAIN AND SKIP RETURN
SONPJ1::AOS 0(P) ;SKIP RETURN
JRST SONPPJ##
;from COMMON.MAC/150P,151P
;SUBROUTINES TO SAVE AND RESTORE PRESERVED ACS
;SAVEN IS CALLED AT THE BEGINNING OF A SUBROUTINE
;FOR CONVENIENCE NO MATCHING SUB IS NEEDED TO BE CALLED
;TO RESTORE THIS ACS.
;INSTEAD AN EXTRA RETURN IS PUT ON STACK
;5 CHAR NAME INDICATES IT VIOLATES
;SUBROUTINE CALLING CONVENTIONS
;CALL: PUSHJ P,SAVEN
; RETURN HERE IMMEDIATELY WITH EXTRA RETURN ON STACK
; RESPECTS ALL ACS
;NOTE: THIS CODE USES 1 LOC BEYOND END OF STACK BUT THEN PUSHES ON TOP OF IT
;SO GET OVERFLOW INTERUPT IF TOO FULL. OK TO DO 1(P) SINCE THIS WORD WRITTEN ON OVERFLOW
$HIGH
SAVE1:: EXCH P1,(P) ;SAVE P1, GET CALLER PC
MOVEM P1,1(P) ;SAVE CALLER PC ONE BEYOND END
MOVE P1,(P) ;RESTORE P1
PUSHJ P,@1(P) ;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
JRST RES1
AOS -1(P)
JRST RES1
SAVE2:: EXCH P1,(P) ;SAVE P1, GET CALLER PC
PUSH P,P2
MOVEM P1,1(P) ;SAVE CALLER PC ONE BEYOND END
MOVE P1,-1(P) ;RESTORE P1
PUSHJ P,@1(P) ;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
JRST RES2
AOS -2(P)
JRST RES2
SAVE3:: EXCH P1,(P) ;SAVE P1, GET CALLER PC
PUSH P,P2
PUSH P,P3
MOVEM P1,1(P) ;SAVE CALLER PC ONE BEYOND END
MOVE P1,-2(P) ;RESTORE P1
PUSHJ P,@1(P) ;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
JRST RES3
AOS -3(P)
JRST RES3
SAVE4:: EXCH P1,(P) ;SAVE P1, GET CALLER PC
PUSH P,P2
PUSH P,P3
PUSH P,P4
MOVEM P1,1(P) ;SAVE CALLER PC ONE BEYOND END
MOVE P1,-3(P) ;RESTORE P1
PUSHJ P,@1(P) ;GO BACK TO CALLER, OVERWRITE CALLER PC WITH .+1
JRST RES4
AOS -4(P)
RES4: POP P,P4
RES3: POP P,P3
RES2: POP P,P2
P1POPJ::
RES1: POP P,P1
POPJ P,
;SUBROUTINE TO SAVE AND RESTORE TEMP ACS
;CALLED BY PUSHJ P,SAVT RETURN EITHER CPOPJ OR CPOPJ1 WHEN THROUGH
SAVT:: EXCH T4,(P) ;SAVE T4, GET RETURN ADR.
PUSH P,T3 ;SAVE T3
PUSH P,T2 ;AND T2
PUSH P,T1 ;AND T1
MOVEM T4,1(P) ;STORE PC
MOVE T4,-3(P) ;RESTORE T4
PUSHJ P,@1(P) ;RETURN TO CALLER
SKIPA ;POPJ RETURN
AOS -4(P) ;CPOPJ1 - SET SKIP RETURN
POP P,T1 ;RESTORE T1
POP P,T2 ;RESTORE T3 ACS
POP P,T3
T4POPJ::POP P,T4
POPJ P, ;AND RETURN
;from COMDEV.MAC/78P
XP IMPN,20 ;some random values
XP ITYN,10
XP ARPA.H,0 ;Correct for SU-AI
XP ARPA.I,11
XP ITYFST,200
SUBTTL (110) DEFINITIONS AND ENTRY POINTS FOR IMP
IFN FTCIMP,< ;(110)
IFE IMPN,< ;(110) IF NOT LOADING IMP SERVICE, PROVIDE NO-OPS
IMPUUO::IMPSEC::IMPTIK::IMPDEV:: ;(110)
TTIDET::IMPTYP::EQIITO::IMPATT:: ;(110)
RQTIIO::RQTITO::XMTQIT::IMPRES:: ;(110)
POPJ P, ;(110)
XP .TNWIL,0 ;(110)
XP .TNWNT,0 ;(110)
XP .TOFCH,0 ;(110)
XP MPIINT,0 ;(110)
XP MPEINT,0 ;(110)
XP MPPINT,0 ;(110)
XP .TNIAC,0 ;(110)
XP .TNAO,0 ;(110)
XP TELTAB,0 ;(110)
IMPISR::REPEAT 10,<POPJ P,> ;(110) DUMMY ISR ENTRY POINTS
IMPGTT::0 ;(110)
XP .ISMXL,0 ;(110)
> ;END IFE IMPN ;(110)
$LOW
IMPRQF::0 ;(110) IMP REQUEST FLAG. SET WHEN IMP/TTY PROCESSING
;(110) IS DESIRED AT CLOCK LEVEL
;(150) ALSO USED TO SIGNAL REQUEST FOR
;(150) NON-BLOCKING I/O PROCESSING AT
;(150) CLOCK LEVEL
$HIGH
;NETWORK SITE HOST ID, FOR USE IN SEND COMMAND
HSTNAM::HSTNAM
;HOST SITE NUMBER, SO CAN IDENTIFY SELF ;(110)
XP THSITE,<<ARPA.H←↑D16>+ARPA.I> ;(222) THE net/HOST/IMP NUMBER
MYSITE::THSITE ;(222) STORE SITE NUMBER HERE
HDSITE==:<THSITE←8> ;(222) THE HOST NUMBER AS IT
;(222) APPEARS IN A HEADER
IFG IMPN,< ;(110)
EXTERN IMPSER,IMPINT ;(110) INSIST ON IMP SERVICE
IFG ITYN-IMPN+1,<PRINTX ?TOO MANY ITYS FOR AVAILABLE IMPS> ;(110)
XP MIMPN,-IMPN ;(110) FOR COUNTERS AND LOOPS
XP MITYN,-ITYN ;(110)
XP ITYOFS,ITYTAB##-ITYFST ;(110) OFFSET TTYTAB )INDEX BY LINE #)
XP ITIMPL,ITYN←9+IMPN ;(110) FOR HOST FUNCTIONS IN IMPUUO
IFNDEF IMPBFN,< ;(110) NUMBER OF IMP BUFFERS (SLIDING SCALE)
IFLE IMPN-8,<XP IMPBFN,↑D14*IMPN> ;(110)
IFG IMPN-8,<XP IMPBFN,↑D12*IMPN> ;(110)
> ;(110)
IFNDEF IMPBFS,<XP IMPBFS,↑D37> ;(110) SIZE OF EACH BUFFER (MUST BE ODD)
XP IMPB36,↑D<<IMPBFN+35>/36> ;(110) 1/36TH NUMBER OF BUFFERS
XP IMPM36,-IMPB36 ;(110) NEGATIVE FOR AOBJN COUNTS
XP IMPB%4,IMPBFN/4 ;(110) 1/4TH NUMBER OF BUFFERS
XP MMPBFS,-IMPBFS ;(110) NEGATIVE OF BUFFER SIZE
XP MIMBS1,-IMPBFS+1 ;(110)
XP MIMBS2,-IMPBFS+2 ;(110)
XP IMPTBS,IMPBFN*IMPBFS ;(110) TOTAL WORDS RESERVED FOR IMP BUFFERS
$LOW
IMPBFT::BLOCK IMPB36 ;(110)IMP BUFFER ALLOCATION TABLE
IMPBUF::0 ;(110) POINTER TO FIRST IMP BUFFER
IMPBFE::0 ;(110) POINTER PAST END OF IMP BUFFERS
> ;END IFG IMPN ;(110)
> ;END IF N FTCIMP ;(110)
$HIGH
END